//
//  XKStatusViewModel.swift
//  XKWeibo
//
//  Created by 小k on 15/11/13.
//  Copyright © 2015年 小k. All rights reserved.
//

import Foundation
import SDWebImage

/// 微博数据列表视图模型
class XKStatusListViewModel {
    /// 微博数据模型数组
    lazy var statusList = [XKStatusViewModel]()
    
    /// 下拉刷新计数
    var pulldownCount: Int?
    
    /// 加载微博数据
    func loadStatus(isPullup isPullup: Bool, flashed: (isSuccessed: Bool)->()) {

        // 下拉刷新 - 数组中第一条微博的id
        let since_id = isPullup ? 0 : (statusList.first?.status.id ?? 0)
        // 上拉刷新 - 数组中最后一条微博的id
        let max_id = isPullup ? (statusList.last?.status.id ?? 0) : 0
        
        NetworkTools.sharedTools.loadStatus (since_id: since_id, max_id: max_id) { (result, error) -> () in
            // 1. 判断是否有错
            if error != nil {
                flashed (isSuccessed: false)
                return
            }
            
            // 2.判断result的数据结构是否正确
            guard let array = result?["statuses"] as? [[String: AnyObject]] else {
                print("格式错误")
                flashed (isSuccessed: false)
                return
            }
            
            // 3.遍历数组 字典转模型
            // 定义一个可变数组
            var dataList = [XKStatusViewModel]()
            for dict in array {
                dataList.append(XKStatusViewModel.init(status: XKStatus(dict: dict)))
            }
            
            print("刷新到 \(dataList.count) 条数据")
            
            // 4. 拼接数据
            // 判断是上拉刷新, 还是下拉刷新
            if max_id > 0 {
                self.statusList += dataList
            }else {
                self.statusList = dataList + self.statusList
            }
            
            // 5. 混存图片
            self.cacheSingleImage(dataList, flashed: flashed)
            
            
        }
    }
    
    // MARK: - 缓存图片并且完成回调
    private func cacheSingleImage(array:[XKStatusViewModel], flashed:(isSuccessed:Bool) -> ()) {
        // 0. 创建调度组
        let group = dispatch_group_create()
        
        // 缓存数据长度
        var dataLength = 0
        
        // 1. 遍历数组
        for vm in array {
            
            // 如果不等于 1 就跳过执行
            if vm.thumbnailUrls?.count != 1 {
                continue
            }
            
            // 2. 获取url
            let url = vm.thumbnailUrls![0]
            
            print("要下载的图片\(url)")
            
            // 3. 下载图片
            // 入组
            dispatch_group_enter(group)
            
            SDWebImageManager.sharedManager().downloadImageWithURL(url,
                options: [SDWebImageOptions.RetryFailed, SDWebImageOptions.RefreshCached],
                progress: nil,
                completed: { (image, error, _, _, _) -> Void in
                
                // 同时判断多个条件是否满足
                if let img = image, data = UIImagePNGRepresentation(img) {
                    
                    // 累加长度
                    dataLength += data.length
                }
                
                // 出组
                dispatch_group_leave(group)
            })
        }
        
            // 4. 监听调度组完成
            dispatch_group_notify(group, dispatch_get_main_queue()){ () -> Void in
                print("缓存完成 \(dataLength / 1024)K")
                
                // 完成回调
                flashed (isSuccessed: true)
            }
    }
}



